iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
自我挑戰組

菜鳥AI工程師給碩班學弟妹的挑戰系列 第 23

[Day 23] fastapi + lightning -> LitServe

  • 分享至 

  • xImage
  •  

前情提要: 昨天分享了最近我關注的github,每個領域都有,可以找自己有興趣的研究研究。

今天剛好看到這個 https://github.com/Lightning-AI/LitServe ,跟我們之前講的fastapi + lightning一樣,他把它包得更好,效率更高,讓我們一起來研究看看吧。

1. 安裝

pip install litserve

2. 範例程式

# server.py
import litserve as ls

# (STEP 1) - DEFINE THE API (compound AI system)
class SimpleLitAPI(ls.LitAPI):
    def setup(self, device):
        # setup is called once at startup. Build a compound AI system (1+ models), connect DBs, load data, etc...
        self.model1 = lambda x: x**2
        self.model2 = lambda x: x**3

    def decode_request(self, request):
        # Convert the request payload to model input.
        return request["input"] 

    def predict(self, x):
        # Easily build compound systems. Run inference and return the output.
        squared = self.model1(x)
        cubed = self.model2(x)
        output = squared + cubed
        return {"output": output}

    def encode_response(self, output):
        # Convert the model output to a response payload.
        return {"output": output} 

# (STEP 2) - START THE SERVER
if __name__ == "__main__":
    # scale with advanced features (batching, GPUs, etc...)
    server = ls.LitServer(SimpleLitAPI(), accelerator="auto", max_batch_size=1)
    server.run(port=8000)

當run起來會長這樣,此時在相同目錄下就會自動多出一個client.py,讓你用於測試
https://ithelp.ithome.com.tw/upload/images/20240827/20168446YmIkJ5eOUy.png

一樣在網址後面多/docs,會出現這個測試頁面,我想說/predict,是不是對應def predict,不過我多新增其他的,他似乎不會讀到,所以跟lightning一樣是固定名稱的。

https://ithelp.ithome.com.tw/upload/images/20240827/20168446VwdhX8p2HK.png

[8/29更新]
參考: https://lightning.ai/docs/litserve/api-reference/litserver
在這邊可以決定你使用的URL path
https://ithelp.ithome.com.tw/upload/images/20240829/20168446IHfErsgGUg.png

3. client.py

import requests

response = requests.post("http://127.0.0.1:8000/predict", json={"input": 4.0})
print(f"Status: {response.status_code}\nResponse:\n {response.text}")

https://ithelp.ithome.com.tw/upload/images/20240827/20168446Eo7wUpKSyV.png

4. 流程

雖然還沒更深入研究,不過流程大致上如下:

  1. client傳送input = 4.0過去
  2. server端的decode_request解析request["input"]
  3. 送到predict做inference輸出結果
  4. 結果再透過encode_response打包一下回傳

[8/29更新] 這裡補上網址:
https://lightning.ai/docs/litserve/api-reference/litapi
https://lightning.ai/docs/litserve/home/benchmarks#text-classification

分成兩種方式處理: Not batched, Batched
在大量被連線的情況下選用Batched,可以更好的增加效能
https://ithelp.ithome.com.tw/upload/images/20240829/20168446q6YMoENgpr.png

https://ithelp.ithome.com.tw/upload/images/20240829/20168446OstijXMtd1.png

https://ithelp.ithome.com.tw/upload/images/20240829/20168446HxxlQpjo30.png

程式看起來確實精簡很多,不過需要去熟悉一下,以及看更多範例去實作,不過在我的筆電上跑要斷掉時會卡死,不確定在linux會不會,感覺還要研究。
今天就更新到這囉~~ 明天繼續把研究的結果跟大家分享。


上一篇
[Day 22] 推薦的github
下一篇
[Day 24] fastapi + lightning -> LitServe - 2
系列文
菜鳥AI工程師給碩班學弟妹的挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言